package com.zzyl.aop;

import cn.hutool.core.util.ReflectUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;


@Slf4j
@Component
@Aspect
public class AutoFillInsertAspect {
    @Before("@annotation(com.zzyl.aop.AutoFill)")
    public void autoFill(JoinPoint joinPoint) {
        //获取方法的参数
        Object[] args = joinPoint.getArgs();

        //如果参数的个数大于1，说明不正常，拒绝处理
        if (args.length != 1) {
            return;
        }

        //获取方法的第一个参数
        Object pojo = args[0];


        log.info("方法的原始参数：{}", pojo);

        //通过反射，给pojo对象的属性赋值
        //给pojo对象中的createTime属性赋值为LocalDateTime.now()
        ReflectUtil.setFieldValue(pojo, "createTime", LocalDateTime.now());
        ReflectUtil.setFieldValue(pojo, "updateTime", LocalDateTime.now());

        ReflectUtil.setFieldValue(pojo, "createBy", 1671403256519078138L);
        ReflectUtil.setFieldValue(pojo, "updateBy", 1671403256519078138L);

        log.info("方法的最终参数：{}", pojo);
    }

}
